/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logicaNegocio;

import Utiles.Utiles;
import entidades.*;
import persistencia.Agente;
import persistencia.agente.*;

/**
 *
 * @author Sebastian
 */
public class FabricaEntidad {

    private static FabricaEntidad instancia;

    private FabricaEntidad() {
    }

    ;
    
    public static synchronized FabricaEntidad getInstancia() {
        if (instancia == null) {
            instancia = new FabricaEntidad();
        }
        return instancia;
    }

    public <T> T obtenerEntidad(Class<T> clase) {
        Object resultado = null;
        if (clase.equals(Cama.class)) {
            CamaAgente agente = new CamaAgente();
            CamaImpl impl = new CamaImpl();
            agente.setOid(Utiles.generarOid());
            agente.setCama(impl);
            resultado = agente;
        } else if (clase.equals(DetallePedidoProducto.class)) {
            DetallePedidoProductoAgente agente = new DetallePedidoProductoAgente();
            DetallePedidoProductoImpl impl = new DetallePedidoProductoImpl();
            agente.setOid(Utiles.generarOid());
            agente.setDetallePedidoProducto(impl);
            resultado = agente;
        }else if(clase.equals(DetallePedidoServicio.class)){
            
            DetallePedidoServicioAgente agente = new DetallePedidoServicioAgente();
            DetallePedidoServicioImpl impl = new DetallePedidoServicioImpl();
            agente.setOid(Utiles.generarOid());
            agente.setDetallePedidoServicio(impl);
            resultado = agente;                      
        }else if(clase.equals(Dia.class)){
            DiaAgente agente = new DiaAgente();
            DiaImpl impl = new DiaImpl();
            agente.setOid(Utiles.generarOid());
            agente.setDia(impl);
            resultado = agente;                        
        }else if(clase.equals(Empleado.class)){
            EmpleadoAgente agente = new EmpleadoAgente();
            EmpleadoImpl impl = new EmpleadoImpl();
            agente.setOid(Utiles.generarOid());
            agente.setEmpleado(impl);
            resultado = agente;                      
        }else if(clase.equals(EstadoFichaInternacion.class)){
            EstadoFichaInternacionAgente agente = new EstadoFichaInternacionAgente();
            EstadoFichaInternacionImpl impl = new EstadoFichaInternacionImpl();
            agente.setOid(Utiles.generarOid());
            agente.setEstadoFichaInternacionImpl(impl);
            resultado = agente;                      
        }else if(clase.equals(EstadoPedido.class)){
            EstadoPedidoAgente agente = new EstadoPedidoAgente();
            EstadoPedidoImpl impl = new EstadoPedidoImpl();
            agente.setOid(Utiles.generarOid());
            agente.setEstadoPedidoImpl(impl);
            resultado = agente;                     
        }else if(clase.equals(FichaInternacion.class)){
            FichaInternacionAgente agente = new FichaInternacionAgente();
            FichaInternacionImpl impl = new FichaInternacionImpl();
            agente.setOid(Utiles.generarOid());
            agente.setFichaInternacionImpl(impl);
            resultado = agente;                        
        }else if(clase.equals(Habitacion.class)){
            HabitacionAgente agente = new HabitacionAgente();
            HabitacionImpl impl = new HabitacionImpl();
            agente.setOid(Utiles.generarOid());
            agente.setHabitacionImpl(impl);
            resultado = agente;                     
        }else if(clase.equals(HistoricoPrecio.class)){
            HistoricoPrecioAgente agente = new HistoricoPrecioAgente();
            HistoricoPrecioImpl impl = new HistoricoPrecioImpl();
            agente.setOid(Utiles.generarOid());
            agente.setHistoricoPrecioImpl(impl);
            resultado = agente;                       
        }else if(clase.equals(Paciente.class)){
            PacienteAgente agente = new PacienteAgente();
            PacienteImpl impl = new PacienteImpl();
            agente.setOid(Utiles.generarOid());
            agente.setPaciente(impl);
            resultado = agente;                      
        }else if(clase.equals(Pedido.class)){
            PedidoAgente agente = new PedidoAgente();
            PedidoImpl impl = new PedidoImpl();
            agente.setOid(Utiles.generarOid());
            agente.setPedido(impl);
            resultado = agente;                      
        }else if(clase.equals(Producto.class)){
            ProductoAgente agente = new ProductoAgente();
            ProductoImpl impl = new ProductoImpl();
            agente.setOid(Utiles.generarOid());
            agente.setProducto(impl);
            resultado = agente;                     
        }else if(clase.equals(Promocion.class)){
            PromocionAgente agente = new PromocionAgente();
            PromocionImpl impl = new PromocionImpl();
            agente.setOid(Utiles.generarOid());
            agente.setPromocion(impl);
            resultado = agente;                     
        }else if(clase.equals(Servicio.class)){
            ServicioAgente agente = new ServicioAgente();
            ServicioImpl impl = new ServicioImpl();
            agente.setOid(Utiles.generarOid());
            agente.setServicio(impl);
            resultado = agente;                      
        }
        ((Agente)resultado).setNuevo(true);
        return (T) resultado;
    }
}
